// 类
// 修饰符： 
// 公共 public: 谁都可以访问
// 保护 protected: 自己和孩子
// 私有 private : 自己

// 1. 名字一般要使用大驼峰命名规则
// 父类 ｜ 基类
export class Person {
  // 3. 定义的实例属性必须 赋值初始值或者构造函数赋值
  public name: string
  public age: number
  public sex: string
  public height: number
  // 保护
  protected money = 10000
  // 私有
  private litterMoney = 100
  // 构造器
  constructor(name: string, age: number, sex: string, height: number) {
    this.name = name
    this.age = age
    this.sex = sex
    this.height = height


    this.money -= 3

    this.litterMoney += 100
  }

  // 4.原型方法: 被所有实例所继承
  say() {
    console.log(`我是${this.name}, 今年${this.age}岁了， 性别${this.sex}, 身高${this.height}`)
  }
}


// 子类 ｜ 派生类
class Man extends Person {
  constructor(name: string, age: number, height: 180) {
    super(name, age, '男', height)

    this.money -= 1000

    // this.litterMoney -= 100
  }
}

const m1 = new Man('张三', 18 , 180)

class Woman extends Person {
  constructor(name: string, age: number, height: 180) {
    super(name, age, '女', height)
  }
}

const w1 = new Woman('张三', 18 , 180)

console.log(m1, w1)



// m1.money -= 10





// class Index extends React.Component {
//   constructor(props) {
//     super(props)
//   }
// }